package TUILayer;

import ControlLayer.*;
import ModelLayer.*;

import java.util.Scanner;
import java.util.ArrayList;
/**
 * This is a user interface and the menu for handling the addressbook.
 * 
 * @author (gruppe 1) 
 * @version (17.12.2012)
 */
public class KundeUI
{
    private KundeBaseCtr kundeBaseCtr;
    private Kunde kunde;
    /**
     * Constructor for objects of class AddressBookUI
     */
    public KundeUI()
    {
        kundeBaseCtr = KundeBaseCtr.getInstance();
    }
    
    /**
     * Denne metode starter KundeBasen
     */
    public void start()
    {
        clr();
        kundeMenu();
    }
    
    /**
     * Denne menu haandtere de forskellige valge.
     */
    private void kundeMenu()
    {
        boolean exit = false;
        while(!exit)
        {
            int choise = writeKundeMenu();
            switch(choise)
            {
                case 1:
                    addEmployee();
                    break;
                case 2:
                    addCustomer();
                    break;
                case 3:
                    showPerson();
                    break;
                case 4:
                    deletePerson();
                    break;
                case 5:
                    showPersonList();
                    break;
                case 6:
                    exit = true;
                    break;
                default:
                    break;
            }
        }
    }
    /**
     * De forskellige valgmuligheder i menuen.
     */
    private int writeKundeMenu()
    {
        space();
        print(" *** Addresse Kartotek Menu *** ");
        print(" (1) Tilfoej ny medarbejder");
        print(" (2) Tilfoej ny kunde");
        print(" (3) Vis detaljer om person");
        print(" (4) Slet person");
        print(" (5) Vis liste over personer");
        print(" (6) Gaa tilbage til hovedmenu");
        print("\n Foretag din beslutning: ");
            
        boolean exit = false;
        int choise = 0;
        while(!exit)
        {
            try
            {
                Scanner keyboard = new Scanner(System.in);
                choise = keyboard.nextInt();
                exit = true;
            }
            catch(Exception e)
            {
                print("Ugyldigt valg, proev igen");
            }
        }
        return choise;
    }
    
    private String getInputString(String str)
    {
        print(str);
        
        boolean exit = false;
        String string = "";
        while(!exit)
        {
            try
            {
                Scanner keyboard = new Scanner(System.in);
                string = keyboard.nextLine();
                exit = true;
            }
            catch(Exception e)
            {
                print("Ugyldigt input, proev igen");
            }
        }
        return string;
    }
    /**
     * Viser personListen vha. kundebasen
     */
    private void showPersonList()
    {
        space();
        ArrayList<Kunde> liste = kundeBaseCtr.listAllPersons();
        for(Kunde k : liste)
        {
            print("ID: " + k.getId() + " Fornavn: " + k.getFnavn() + " Efternavn: " + k.getEnavn());
        }
        space();
    }
    
    private int getInputInt(String str)
    {
        print(str);
        
        boolean exit = false;
        int integer = 0;
        while(!exit)
        {
            try
            {
                Scanner keyboard = new Scanner(System.in);
                integer = keyboard.nextInt();
                exit = true;
            }
            catch(Exception e)
            {
                print("Ugyldigt input, proev igen");
            }
        }
        return integer;
    }
    /**
     * Print detaljer omkring kunde.
     */
    private void printDetails(Kunde k)
    {
        boolean isKunde = true;
        space();
        try
        {
            k = (kunde);
        }
        catch(Exception e)
        {
            isKunde = false;
        }
        print("\n");
        print("ID:      " + k.getId());
        print("Navn:    " + k.getFnavn() + k.getEnavn());
        print("Adresse: " + k.getAdresse());
        print("Telefon nr.: " + k.getTelefonNr());
        print("Email adr.;  " + k.getEmail());
        if(isKunde)
        {
            print("Status:      Kunde");
            print("Kredit loft: " + k.getRabat());
            print("Kredit balance:" + k.getKontoSaldo());
        }
        else
        {
            print("Status:      Medarbejder");
        }
        space();
    }
    /**
     * Tilføjer Ansat.
     */
    private void addEmployee()
    {
        String fnavn = getInputString("Indtast medarbejderens fornavn: ");
        String enavn = getInputString("Indtast medarbejderens efternavn:");
        String email = getInputString("Indtast medarbejderens email adresse:");
        String login = getInputString("Indtast medarbejderens initialer:");
        String password = getInputString("Indtast medarbejderens adgangskode:");
        space();
        
        kundeBaseCtr.nyAnsat(fnavn,enavn,email,login, password);
    }
    /**
     * Tilføjer kunde
     */
    private void addCustomer()
    {
        int id = getInputInt("Indtast kunde id: ");
        String enavn = getInputString("Indtast kundens fornavn: ");
        String fnavn = getInputString("Indtast kundens efternavn: ");
        String adresse = getInputString("Indtast kundens adresse: ");
        int telefonNr = getInputInt("Indtast kundens telefon nummer: ");
        String email = getInputString("Indtast kundens email adresse: ");
        int postNr = getInputInt ("Indtast kundens post nr: ");
        String by = getInputString ("Indtast kundens post nr: ");
        double rabat = getInputDouble("Indtast kundens rabat rate: ");
        double kreditLoft = getInputDouble("Indtast kundens kredit loft: ");
        double kontoSaldo = 0;
        space();
        
        kundeBaseCtr.nyKunde(id, fnavn, enavn, adresse, email, postNr, by, telefonNr, rabat, kontoSaldo, kreditLoft);
    }
    /**
     * Vis person vha. Id
     * 
     * @param int id - Viser personen
     */
    private void showPerson()
    {
        int id = getInputInt("Indtast personens id:");
        printDetails(kundeBaseCtr.getKundeById(id));
        space();
    }
    /**
     * Slet Kunde
     * 
     * @param int id - Sletter kunde via Id
     */
    private void deletePerson()
    {
        int id = getInputInt("Indtast personens id:");
        kundeBaseCtr.deleteKunde(id);
        space();
    }
    /**
     * Få kundestatus 
     * 
     * @return kunde k - Kundestatus bliver returneret vha. status
     */
    private String getStatus(Kunde k)
    {
        String status = "Kunde";
        try
        {
            k = (kunde);
        }
        catch(Exception e)
        {
            status = "Medarbejder";
        }
        return status;
    }
    
    /**
     * Denne metoder printer String str.
     * 
     * @param String str - String A bliver sat til at printe.
     */
    private void print(String str)
    {
        System.out.println(str);
    }
    
    /**
     * Denne metode resetter menuen
     */
    private void clr()
    {
        print("\f");
    }
    
    /**
     * Denne metode tilfoejer to tomme linjer så der er plads.
     */
    private void space()
    {
        print("\n");
    }

        private double getInputDouble(String str)
    {
        print(str);
        
        boolean exit = false;
        double dob = 0;
        while(!exit)
        {
            try
            {
                Scanner keyboard = new Scanner(System.in);
                dob = keyboard.nextDouble();
                exit = true;
            }
            catch(Exception e)
            {
                print("Ugyldigt input, proev igen");
            }
        }
        return dob;
    }
}